#include<stdio.h>
#define maxn 35
int n;
int m[maxn][maxn];
void bfs(int x, int y);
void center(int *x, int *y) {
  for(int i=0; i<n; ++i)
    for(int j=0; j<n; ++j) {
      if(m[i][j]==1)continue;
      int nx=i, ny=j;
      int flag = 0;
      while(nx>0)
        if(m[--nx][ny]==1) {flag++; break;}
      nx=i;
      while(ny>0)
        if(m[nx][--ny]==1) {flag++; break;}
      ny=j;
      while(nx<n-1)
        if(m[++nx][ny]==1) {flag++; break;}
      nx=i;
      while(ny<n-1)
        if(m[nx][++ny]==1) {flag++; break;}
      if(flag!=4) {
        bfs(i, j);
      }
    }
}
typedef struct{int x, y;}P;
#define len 200
int ql, qr;
P q[len];
void push(int x, int y) {
  P t = {x, y};
  int qt = qr;
  qr = (qr+1)%len;
  q[qt] = t;
}
P pop() {
  int qt = ql;
  ql = (ql+1)%len;
  return q[qt];
}
int empty() { return ql==qr; }
void clear() { ql=qr=0; }
const int dx[] = {-1, 0, 1, 0};
const int dy[] = {0, 1, 0, -1};
void bfs(int x, int y) {
  push(x, y);
  while(!empty()) {
    P cur = pop();
    int ix = cur.x, iy = cur.y;
    m[ix][iy] = 4;
    for(int i=0; i<4; ++i) {
      int nx=ix+dx[i], ny=iy+dy[i];
      if(nx<0 || ny<0 || nx>=n || ny>=n
          || m[nx][ny]!=0) continue;
      push(nx, ny);
    }
  }
  
}
int main() {
  scanf("%d", &n);
  for(int i=0; i<n; ++i)
    for(int j=0; j<n; ++j)
      scanf("%d", &m[i][j]);
  int x, y;
  center(&x, &y);
  for(int i=0; i<n; ++i) {
    for(int j=0; j<n; ++j) {
      if(m[i][j]==0) m[i][j] = 2;
      m[i][j] &= 0x3;
    }
  }
  for(int i=0; i<n; ++i) {
    for(int j=0; j<n; ++j) {
      printf("%d ", m[i][j]);
    }
    putchar('\n');
  }
}
